package ar.edu.caece.dns.resolver;

import junit.framework.TestCase;

import ar.edu.caece.dns.StartApp;
import ar.edu.caece.dns.modelo.registros.NombreDominio;
import ar.edu.caece.dns.modelo.utils.NombreDominioParser;

public class ClientDNSTestCase extends TestCase {

	/**
	 * Se consulta www.caece.edu.ar y se espera CNAME:10.10.10.199
	 */
	public void testSimple() {

		StartApp start = new StartApp(
				new String[] { "src/test/resources/clientDNSImplTestCase" });
		
		start.execute();

		ClientDNS cliente = new ClientDNSImpl();

		try {

			String dominio = "www.caece.edu.ar";
			NombreDominioParser parser = new NombreDominioParser();
			NombreDominio nombreDominio = parser.parse(dominio);
			String respuesta = cliente.resolver(nombreDominio);

			System.out.println("Dominio: " + dominio + " Respuesta: "
					+ respuesta);
			assertEquals("CNAME:10.10.10.199", respuesta);

		} catch (ResolverException re) {
			re.printStackTrace();
			fail("ResolverException en test: " + this.getName());

		} finally {
			start.terminar();

		}

	}
	
	public void testMultiple() {

		StartApp start = new StartApp(
				new String[] { "src/test/resources/clientDNSImplTestCase" });
		
		start.execute();

		ClientDNS cliente = new ClientDNSImpl();

		try {

			NombreDominioParser parser = new NombreDominioParser();
			
			NombreDominio ndCaeceEduAr = parser.parse("caece.edu.ar");
			String respuestaCaeceEduAr = cliente.resolver(ndCaeceEduAr);
			System.out.println("Dominio: " + ndCaeceEduAr.getValor() + " Respuesta: " + respuestaCaeceEduAr);
			assertEquals("A:10.10.10.199", respuestaCaeceEduAr);
			
			NombreDominio ndWWWCaeceEduAr = parser.parse("www.caece.edu.ar");
			String respuestaWWWCaeceEduAr = cliente.resolver(ndWWWCaeceEduAr);
			System.out.println("Dominio: " + ndWWWCaeceEduAr.getValor() + " Respuesta: " + respuestaWWWCaeceEduAr);
			assertEquals("CNAME:10.10.10.199", respuestaWWWCaeceEduAr);
			
			NombreDominio ndAr = parser.parse("ar");
			String respuestaAr = cliente.resolver(ndAr);
			System.out.println("Dominio: " + ndAr.getValor() + " Respuesta: " + respuestaAr);
			assertEquals("no existe", respuestaAr);
			
			NombreDominio ndCaece = parser.parse("caece");
			String respuestaCaece = cliente.resolver(ndCaece);
			System.out.println("Dominio: " + ndCaece.getValor() + " Respuesta: " + respuestaCaece);
			assertEquals("no existe", respuestaCaece);
			
			NombreDominio ndEdu = parser.parse("edu");
			String respuestaEdu = cliente.resolver(ndEdu);
			System.out.println("Dominio: " + ndEdu.getValor() + " Respuesta: " + respuestaEdu);
			assertEquals("no existe", respuestaEdu);
			
			NombreDominio ndCaeceComAr = parser.parse("caece.com.ar");
			String respuestaCaeceComAr = cliente.resolver(ndCaeceComAr);
			System.out.println("Dominio: " + ndCaeceComAr.getValor() + " Respuesta: " + respuestaCaeceComAr);
			assertEquals("no existe", respuestaCaeceComAr);

		} catch (ResolverException re) {
			re.printStackTrace();
			fail("ResolverException en test: " + this.getName());

		} finally {
			start.terminar();

		}

	}

}
